我经常发现自己实现了一个类,它维护某种自己的状态属性作为枚举:我有一个 Status 枚举和一个 Status 类型的 Status 属性。我应该如何解决这个名称冲突?
public class Car { public enum Status { Off, Starting, Moving }; Status status = Status.Off; public Status Status // <===== Won't compile ===== { get { return status; } set { status = value; DoSomething(); } } }
如果 Status 枚举对不同类型是通用的,我会把它放在课堂之外,问题就会得到解决。但 Status 仅适用于 Car,因此在类之外声明枚举没有意义。
在这种情况下,您使用什么命名约定?
注意:在对此问题的答案的评论中对该问题进行了部分辩论。由于这不是主要问题,因此没有引起太多关注。
编辑:Filip Ekberg 针对“状态”的特定情况提出了一个 IMO 极好的解决方法。然而,我会很高兴阅读有关枚举/属性名称不同的解决方案,如 Michael Prewecki 的回答。
EDIT2(2010 年 5 月):我最喜欢的解决方案是将枚举类型名称复数,正如 Chris S 所建议的那样。根据 MS 指南,这应该仅用于标志枚举。但我越来越喜欢它了。我现在也将它用于常规枚举。
JSON格式非常适合我。标准库提供了编写缩进数据结构的方法,因此可读性很强。
另请参阅此 golang-nuts 线程。
JSON 的好处是解析和人类可读/可编辑相当简单,同时为列表和映射提供语义(这可以变得非常方便),而许多 ini 类型的配置解析器并非如此。
示例用法:
conf.json :
{ "Users": ["UserA","UserB"], "Groups": ["GroupA"] }
读取配置的程序
import ( "encoding/json" "os" "fmt" ) type Configuration struct { Users []string Groups []string } file, _ := os.Open("conf.json") defer file.Close() decoder := json.NewDecoder(file) configuration := Configuration{} err := decoder.Decode(&configuration) if err != nil { fmt.Println("error:", err) } fmt.Println(configuration.Users) // output: [UserA, UserB]